﻿#include <iostream>
#include<vector>
#include<map>
/*
user:Dongcheng Li
date:20191209
key:1.要用一个map来存关键字和对应的位置，以防重复输入关键字，比较麻烦，并且要在一开始就判断好关键字在不在。
2.产生冲突的话就要一个一个往后面加来挪位置，到头了还没有加到就从头开始加。
*/
using namespace std;
int main()
{
	
	int N, P,i,j,x;
	int k = 0;
	cin>>N>>P; 
	int *a = new int[P];
	map<int, int>b;
	for (i = 0; i < P; i++)//先将大小为P的数组全部置为0
	{
		
		a[i] = 0;
	}
	for (i = 0; i < N; i++)
	{
		cin >> x;//输入关键字
		if (b.count(x))//see x is in b or not
		{
			cout<<b.find(x)->second ;//要是关键字在的话就输出第一次保存他的位置
		}
		else
		{
			if (a[x % P] == 0)
			{
				a[x % P] = 1;
				cout << x % P;
				b.insert(pair<int, int>(x, x % P));
			}
			else//就是那个位置为1，即已经插入东西了，即产生冲突。
			{
				for (j = 1; j < P - (x % P); j++)//加到P - (x % P)就停止了哦
				{
					k = 0;
					if (a[(x % P) + j] == 0)
					{
						a[(x % P) + j] = 1;
						k = 1;
						cout << (x % P) + j;
						b.insert(pair<int, int>(x, (x % P) + j));
						break;
					}

				}
				if (k == 0)
				{
					for (j = 0; j < x % P; j++)//加到x % P就停止了哦
					{

						if (a[j] == 0)
						{
							a[j] = 1;

							cout << j;
							b.insert(pair<int, int>(x, j));
							break;
						}

					}
				}
			}
		}
		if (i != N - 1) { cout << " "; }
	}
	
}

